/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

/**
 *
 * @author Bart-Home
 */
public class Case {

    private Piece occupant;
    private int coordX, coordY;

    public Case() {
    }

    public Case(int coordX, int coordY) {
        this.coordX = coordX;
        this.coordY = coordY;
        this.occupant = null;
    }

    public Case(Case TelCase) {
        //! Constructeur qui recopie la case données en paramettre
        this.coordX = TelCase.getCoordX();
        this.coordY = TelCase.getCoordY();
        this.occupant = TelCase.occupant;
    }

    public int getCoordX() {
        return coordX;
    }

    public void setCoordX(int coordX) {
        this.coordX = coordX;
    }

    public int getCoordY() {
        return coordY;
    }

    public void setCoordY(int coordY) {
        this.coordY = coordY;
    }

    public Piece getOccupant() {
        return occupant;
    }

    public void setOccupant(Piece occupant) {
        this.occupant = occupant;
    }

    /**
     * Cette méthode vérifie si la case c passée en paramettre est accessibe depuis la case courante (on verrifie la couleur du pion et si c'est une dame )
     */
    public boolean isAccessible(Case c, String color) {
        //! La case c est elle accessible depuis la case courante par un pion (true=blanc ; false=noir)
        boolean retour = this.couleurOccupant().equals("blanc");
        if ((this.coordX - 1 == c.coordX) && (this.coordY == c.coordY)) {
            return retour || this.getOccupant().isDame();//accessible par blanc
        }
        if ((this.coordX + 1 == c.coordX) && (this.coordY == c.coordY)) {
            return !(retour) || this.getOccupant().isDame();//accessible par noir
        }
        if (this.coordX % 2 == 0) {
            if ((this.coordX - 1 == c.coordX) && (this.coordY - 1 == c.coordY)) {
                return retour || this.getOccupant().isDame();//accessible par blanc
            }
            if ((this.coordX + 1 == c.coordX) && (this.coordY - 1 == c.coordY)) {
                return !(retour) || this.getOccupant().isDame();//accessible par noir
            } else {
                return false;
            }
        }
        if (this.coordX % 2 != 0) {
            if ((this.coordX - 1 == c.coordX) && (this.coordY + 1 == c.coordY)) {
                return retour || this.getOccupant().isDame();//accessible par blanc
            }
            if ((this.coordX + 1 == c.coordX) && (this.coordY + 1 == c.coordY)) {
                return !(retour) || this.getOccupant().isDame();//accessible par noir
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Cette méthode renvoie une string contenant la couleur de l'occupant
     */
    public String couleurOccupant() {
        //! Renvoie vrai si l'occupant est blanc
        //! à ne pas appeler sur une case vide
        if (this.occupant.getCouleur().equals("blanc")) {
            return "blanc";
        }
        if (this.occupant.getCouleur().equals("noir")) {
            return "noir";
        } else {
            return null;
        }
    }

    /**
     * Cette méthode vérifie si l'occupant de la case est un pion blanc ou pas
     */
    public boolean isCouleurOccupantWhite() {
        //! Renvoie vrai si l'occupant est blanc
        //! à ne pas appeler sur une case vide
        if (this.occupant.getCouleur().equals("blanc")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Cette méthode vérifie si la case c passée en paramettre est accessible depuis la case courante en mangeant un pion.
     */
    public Case isAccessibleEnMangeant(Case c) {
        //! La case c est elle accessible depuis la case courante par un pion en mangeant un autre pion
        Case proie = new Case();
        Piece p = new Pion(null);
        if ((this.coordX - 2 == c.coordX) && (this.coordY + 1 == c.coordY)) {
            proie.setCoordX(this.coordX - 1);
            proie.setCoordY(this.coordY + (this.coordX % 2));
            proie.setOccupant(p);
            return proie;
        }
        if ((this.coordX + 2 == c.coordX) && (this.coordY + 1 == c.coordY)) {
            proie.setCoordX(this.coordX + 1);
            proie.setCoordY(this.coordY + (this.coordX % 2));
            proie.setOccupant(p);
            return proie;
        }
        if ((this.coordX - 2 == c.coordX) && (this.coordY - 1 == c.coordY)) {
            proie.setCoordX(this.coordX - 1);
            proie.setCoordY(this.coordY - 1 + (this.coordX % 2));
            proie.setOccupant(p);
            return proie;
        }
        if ((this.coordX + 2 == c.coordX) && (this.coordY - 1 == c.coordY)) {
            proie.setCoordX(this.coordX + 1);
            proie.setCoordY(this.coordY - 1 + (this.coordX % 2));
            proie.setOccupant(p);
            return proie;
        } else {
            proie.setOccupant(null);
            return proie;
        }
    }
}
